//
//  UserAccount.swift
//  Sina
//
//  Created by maling  on 15/11/7.
//  Copyright © 2015年 maling . All rights reserved.
//

import UIKit

//用户账户模型（这步就是服务器返回给我们的数据-里面有令牌信息 过期时间，以及头型等）
//归档解档需要遵守协议
class UserAccount: NSObject, NSCoding {

    //属性定义
    //1>用于调用access_token   借口获取授权后的access token
    var access_token: String?
    //2>access_token的声明周期单位是秒
    var expires_in: NSTimeInterval = 0 {
    
        didSet{
        
            expiresDate = NSDate(timeIntervalSinceNow: expires_in)
        }
    
    }
    //3>当前授权用户的UID
    var uid: String?
    
    //设置一个过期时间（为了将时间格式转换成24小时格式）
    //过期时间
    var expiresDate: NSDate?
    
    //用户昵称
    var screen_name: String?
    
    //用户头像地址（大图） 180*180
    var avatar_large: String?
    
    
    
    
    init(dict: [String: AnyObject]) {
        super.init()
        
        setValuesForKeysWithDictionary(dict)
    }
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    //这句其实作用就是为了能够在控制台输出成为字典格式用的
    override var description: String {
    
        let keys = ["access_token", "expires_in", "uid", "expiresDate", "screen_name", "avatar_large"]
        
//        return dictionaryWithValuesForKeys(keys).description
        return "\(dictionaryWithValuesForKeys(keys))"
        
    }
    
//   //MARK: - 保存用户信息（从网络上面获取的信息）
//    func saveUserAccount() {
//    
//        //1. 保存路径
//        var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
//        //2.从Xcode7开始 stringByAppendPathComponent 转换为NSString 
//        // 单纯的as 在 Swift中 大多只有三个地方 会用到桥接
//        // 1> String as NSString
//        // 2> NSArray as [array]
//        // 3> NSDictionary as [String: AnyObject]
//        //保存为plist文件 拼接后缀名
//        path = (path as NSString) .stringByAppendingPathComponent("account.plist")
//        //打印出地址
//        print(path)
//        
//        //归档保存
//        NSKeyedArchiver.archiveRootObject(self, toFile: path)
//        
//    }
    
    //归档 自动调用
    //归档- 在把当前对象保存到磁盘之前 ，将对象
     func encodeWithCoder(aCoder: NSCoder) {
        
        aCoder.encodeObject(access_token, forKey: "access_token")
        aCoder.encodeObject(expiresDate, forKey: "expiresDate")
        aCoder.encodeObject(uid, forKey: "uid")
        aCoder.encodeObject(screen_name, forKey: "screen_name")
        aCoder.encodeObject(avatar_large, forKey: "avatar_large")
    
    }
    // 解档 - 自动调用
    //-----从磁盘加载二进制文件 转换成为对象调用--跟网络的反序列化很像
    /// - parameter aDecoder: 解码器
    ///
    /// - returns: 当前对象
    /// required - 没有继承 所有的对象只能解档出当前类对象
    required init?(coder aDecoder: NSCoder) {

         access_token = aDecoder.decodeObjectForKey("access_token") as? String
        expiresDate = aDecoder.decodeObjectForKey("expiresDate") as? NSDate
        uid = aDecoder.decodeObjectForKey("uid") as? String
        screen_name = aDecoder.decodeObjectForKey("screen_name") as? String
        avatar_large = aDecoder.decodeObjectForKey("avatar_large") as? String
        
    }
   
    
}













